package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.TipoPrazo;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="tipoPrazoFaces")
@ViewScoped
public class TipoPrazoFaces extends FacesUtil {
	
	private static final long serialVersionUID = 2291565653158082656L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<TipoPrazo> logicaTipoPrazo;
	
	private TipoPrazo tipoPrazo = new TipoPrazo();
	private List<TipoPrazo> listaTipoPrazo = new ArrayList<>();
	private String tipoPrazoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaTipoPrazo.adicionar(tipoPrazo);
				adicionarMensagem("Tipo de Prazo adicionado com sucesso");
				this.buscarTipoPrazo();
				fecharModal("dialogTipoPrazo");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Tipo de Prazo");
		}
	}
	
	public void prepararAdicionar() {
		this.tipoPrazo = new TipoPrazo();
		abrirModal("dialogTipoPrazo");
	}
	
	public void selecionarRegistro(Long idTipoPrazo, boolean editar) {
		try {
			this.tipoPrazo = logicaTipoPrazo.obterPorId(TipoPrazo.class, idTipoPrazo);
			
			if (editar) {
				abrirModal("dialogTipoPrazo");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaTipoPrazo.editar(this.tipoPrazo);
				adicionarMensagem("Tipo de Prazo editado com sucesso");
				fecharModal("dialogTipoPrazo");
				this.buscarTipoPrazo();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Tipo de Prazo");
		}
	}
	
	public void remover() {
		try {
			logicaTipoPrazo.remover(TipoPrazo.class, this.tipoPrazo.getId());
			adicionarMensagem("Tipo de Prazo removido com sucesso");
			fecharModal("dialogExcluir");
			this.buscarTipoPrazo();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Tipo de Prazo");
		}
	}
	
	public void buscarTipoPrazo() {
		if (listaTipoPrazo != null) {
			this.listaTipoPrazo.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(tipoPrazoBusca)) {
				this.listaTipoPrazo =  logicaTipoPrazo.buscarTodos(TipoPrazo.class, "tipoPrazo");
			} else {
				this.listaTipoPrazo = logicaTipoPrazo.buscarPorCampo(TipoPrazo.class, "tipoPrazo", tipoPrazoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.tipoPrazo.getTipoPrazo())) {
			adicionarMensagem("O campo Tipo de Prazo é obrigatório");
			valido = false;
		}

		if (this.tipoPrazo.getQtdDias() == null || this.tipoPrazo.getQtdDias() == 0) {
			adicionarMensagem("O campo Quantidade de dias é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaTipoPrazo(DefaultLogicaContract<TipoPrazo> logicaTipoPrazo) {
		this.logicaTipoPrazo = logicaTipoPrazo;
	}

	public List<TipoPrazo> getListaTipoPrazo() {
		return listaTipoPrazo;
	}

	public void setListaTipoPrazo(List<TipoPrazo> listaTipoPrazo) {
		this.listaTipoPrazo = listaTipoPrazo;
	}

	public String getTipoPrazoBusca() {
		return tipoPrazoBusca;
	}

	public void setTipoPrazoBusca(String TipoPrazoBusca) {
		this.tipoPrazoBusca = TipoPrazoBusca;
	}

	public TipoPrazo getTipoPrazo() {
		return tipoPrazo;
	}

	public void setTipoPrazo(TipoPrazo TipoPrazo) {
		this.tipoPrazo = TipoPrazo;
	}
	
	
}